package com.gxar.uaa.server.db.mapper;

import com.gxar.uaa.api.dto.menu.SysMenu;
import com.gxar.uaa.api.dto.user.SysUserId;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @author linsy
 * @version 1.0
 * @created 2024/1/24 17:26
 */
@Mapper
public interface SysMenuMapper {
    /**
     * 查询类型菜单
     *
     * @param app  app
     * @param type 类型
     * @return 菜单
     */
    List<SysMenu> findMenusByType(String app, Integer type);

    /**
     * 查询用户id菜单
     *
     * @param app    app
     * @param userId 用户id
     * @param type   菜单
     * @param admin  是否管理员
     * @return 菜单
     */
    List<SysMenu> findByUserId(String app, Long userId, Integer type, boolean admin);

    /**
     * 根据菜单名称查询
     *
     * @param app  app
     * @param name 菜单名称
     * @return 菜单
     */
    SysMenu findByName(String app, String name);

    /**
     * 根据url和methods查询
     *
     * @param app       app
     * @param url       url
     * @param urlMethod 请求方式
     * @return 菜单
     */
    SysMenu findByUrlAndMethod(String app, String url, String urlMethod);

    /**
     * 根据菜单url和方法查询用户id
     *
     * @param url       菜单url
     * @param urlMethod url方法
     * @return 有权限的用户id
     */
    List<SysUserId> findUserByMenuUrl(String url, String urlMethod);

    /**
     * 查询指定菜单的子菜单
     *
     * @param app      app
     * @param parentId 父菜单ID
     * @param userId   用户ID
     * @param type     类型
     * @param admin    是否管理员
     * @return 菜单信息
     */
    List<SysMenu> findChildByUserId(String app, Long parentId, Long userId, Integer type, boolean admin);

    /**
     * 根据父菜单查询
     *
     * @param app      app
     * @param parentId 父菜单ID
     * @return 菜单信息
     */
    List<SysMenu> findByParentId(String app, Long parentId);
}
